﻿using System;
using System.Collections.Generic;
using System.Text;

namespace LumaQQ.NET
{

    /// <summary>
    /// 
    /// </summary>
    /// <pre>
    /// 定义一些QQ用到的常量，常量的命名方式经过调整，统一为
    /// QQ_[类别]_[名称]
    /// <p/>
    /// 比如表示长度的常量，为QQ_LENGTH_XXXXX
    /// 表示最大值的常量，为QQ_MAX_XXXX
    /// </pre>
    /// @author luma

    public class _08QQ
    {
        /**
         * 空字符串
         */
        public const String EMPTY_STRING = "";
        /// <summary>
        /// 
        /// </summary>
        public enum Reply_LoginKey : byte
        {
            QQ_REPLY_OK = 0x00,
            /**
             * 密码错误
             */
            QQ_CMD_PASSWORD_ERROR = 0x34,
            /**
             * 需要激活
             */
            QQ_CMD_NEED_ACTIVATE = 0x51
        }
        public enum ProtocolFamily : uint
        {
            // 协议族标识
            /**
             * 基本协议族
             */
            QQ_PROTOCOL_FAMILY_BASIC = 0x1,
            /**
             * 05开头的协议族，目前发现的用途 1. 得到群内自定义表情
             */
            QQ_PROTOCOL_FAMILY_05 = 0x2,
            /**
             * 03开头的协议族，目前发现的用途 1. 得到自定义头像
             */
            QQ_PROTOCOL_FAMILY_03 = 0x4,
            /**
             * ************************************************************************
             * 07开头的协议族，目前发现的用途 1.接受陌生人发送过来的普通消息
             *
             * @author luna
             */
            QQ_PROTOCOL_FAMILY_07 = 0x2,

            /**
             * 所有协议族
             */
            QQ_PROTOCOL_ALL = 0xFFFFFFFF
        }
        /**
         * 基本协议族输入包的包头长度
         */
        public const int QQ_LENGTH_BASIC_FAMILY_IN_HEADER = 7;
        /**
         * 基本协议族输出包的包头长度
         */
        public const int QQ_LENGTH_BASIC_FAMILY_OUT_HEADER = 11;
        /**
         * 基本协议族包尾长度
         */
        public const int QQ_LENGTH_BASIC_FAMILY_TAIL = 1;
        /**
         * FTP协议族包头长度
         */
        public const int QQ_LENGTH_FTP_FAMILY_HEADER = 46;
        /**
         * 05协议族包头长度
         */
        public const int QQ_LENGTH_05_FAMILY_HEADER = 13;
        /**
         * 05协议族包尾长度
         */
        public const int QQ_LENGTH_05_FAMILY_TAIL = 1;
        /**
         * 网络硬盘协议族输入包包头长度
         */
        public const int QQ_LENGTH_DISK_FAMILY_IN_HEADER = 82;
        /**
         * 网络硬盘协议族输出包包头长度
         */
        public const int QQ_LENGTH_DISK_FAMILY_OUT_HEADER = 154;

        /// <summary>
        /// QQ包类型定义
        /// </summary>
        public enum HeaderFamily : byte
        {
            // QQ包类型定义
            /**
             * QQ基本协议族包头
             */
            QQ_HEADER_BASIC_FAMILY = 0x02,
            /**
             * _08QQ P2P协议族
             */
            QQ_HEADER_P2P_FAMILY = 0x00,
            /**
             * 03协议族包头
             */
            QQ_HEADER_03_FAMILY = 0x03,
            /**
             * 04开头的协议族，未知含义，文件中转包有用到过
             */
            QQ_HEADER_04_FAMILY = 0x04,
            /**
             * 05协议族包头
             */
            QQ_HEADER_05_FAMILY = 0x05,
        }
        /// <summary>
        /// QQ基本协议族包尾
        /// </summary>
        public enum TailFamily : byte
        {
            /**
         * QQ基本协议族包尾
         */
            QQ_TAIL_BASIC_FAMILY = 0x03,
            /**
             * 05系列协议族包尾
             */
            QQ_TAIL_05_FAMILY = 0x03
        }

        /// <summary>
        /// 代理类型，和协议没有关系
        /// </summary>
        public enum ProxyType
        {

            // 代理类型，和协议没有关系
            /**
             * 代理类型 - 无代理
             */
            QQ_PROXY_NONE = 0,
            /**
             * 代理类型 - Http代理
             */
            QQ_PROXY_HTTP = 1,
            /**
             * 代理类型 - Socks5代理
             */
            QQ_PROXY_SOCKS5 = 2
        }

        /**
         * 不需要确认的包的发送次数，这个值应该是随便的，由于QQ Logout包发了4次，所以我选4
         */
        public const int QQ_SEND_TIME_NOACK_PACKET = 4;
        /**
         * QQ登录包, 第一段35字节固定内容
         */
        public static readonly byte[] QQ_LOGIN_FIX_1_35 = new byte[]{0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, (byte) 0xD1, 0x18,
            (byte) 0xAC, 0x14, 0x78, 0x58, (byte) 0xF1, (byte) 0xD0,
            (byte) 0x81, 0x4D, 0x7D, 0x7D, 0x7B, (byte) 0xD9, 0x1F
    };
        /**
         * QQ登录包, 第二段16字节固定内容
         */
        public static readonly byte[] QQ_LOGIN_FIX_2_16 = new byte[]{0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
            0x00, 0x00, 0x00
    };
        /**
         * QQ登录包, 第三段16字节固定内容
         */
        public static readonly byte[] QQ_LOGIN_FIX_3_16 = new byte[]{(byte) 0xFD,
            (byte) 0xAC, 0x10, (byte) 0xDC, 0x5C, (byte) 0xE9, 0x74, 0x42,
            (byte) 0x9F, 0x45, 0x7B, 0x73, 0x0E, (byte) 0xB7, (byte) 0x97, 0x65
    };
        /**
         * QQ登录包, 第四段321字节固定内容（近似可以认为是固定）
         */
        public static readonly byte[] QQ_LOGIN_FIX_4_321 = new byte[]{0x40, 0x01,
            0x01, 0x58, (byte) 0x83, (byte) 0xD0, 0x00, 0x10, (byte) 0x9D,
            0x14, 0x64, 0x0A, 0x2E, (byte) 0xE2, 0x11, (byte) 0xF7,
            (byte) 0x90, (byte) 0xF0, (byte) 0xB5, 0x5F, 0x16, (byte) 0xFB,
            0x41, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x76, 0x3C, (byte) 0xEE, 0x4A,
            0x00, 0x10, (byte) 0x86, (byte) 0x81, (byte) 0xAD, 0x1F,
            (byte) 0xC8, (byte) 0xC9, (byte) 0xCC, (byte) 0xCF, (byte) 0xCA,
            (byte) 0x9F, (byte) 0xFF, (byte) 0x88, (byte) 0xC0, 0x5C,
            (byte) 0x88, (byte) 0xD5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
    };
        /**
         * 包最大大小
         */
        public const int QQ_MAX_PACKET_SIZE = 65535;
        /**
         * 消息最大长度，QQ是最大700字节
         */
        public const int QQ_MAX_SEND_IM = 700;
        /**
         * 密钥长度
         */
        public const int QQ_LENGTH_KEY = 16;
        /**
         * 登陆信息长度
         */
        public const int QQ_LENGTH_LOGIN_DATA = 449;

        /**
         * _08QQ UDP缺省端口
         */
        public const int QQ_PORT_UDP = 8000;
        /**
         * _08QQ TCP缺省端口
         */
        public const int QQ_PORT_TCP = 80;
        /**
         * 使用HTTP代理时连接QQ服务器的端口
         */
        public const int QQ_PORT_HTTP = 443;

        /**
         * QQ缺省编码方式
         */
        public const String QQ_CHARSET_DEFAULT = "GBK";
        public enum Charset : ushort
        {
            /**
             * 消息编码，好像可以自己胡乱定义
             */
            QQ_CHARSET_GB = 0x8602,
            QQ_CHARSET_EN = 0x0000,
            QQ_CHARSET_BIG5 = 0x8603
        }
        /**
         * 单位: ms
         */
        public const long QQ_TIMEOUT_SEND = 5000;
        /**
         * 最大重发次数
         */
        public const int QQ_MAX_RESEND = 5;
        /**
         * Keep Alive包发送间隔，单位: ms
         */
        public const long QQ_INTERVAL_KEEP_ALIVE = 100000;

        /// <summary>
        /// 和虚拟摄像头有关系
        /// </summary>
        public enum CAMType
        {
            // 和虚拟摄像头有关系
            /**
             * 显示虚拟摄像头
             */
            QQ_CAM_SHOW_FAKE = 1,
            /**
             * 隐藏虚拟摄像头
             */
            QQ_CAM_DONT_SHOW_FAKE = 0
        }

        /**
         * QQ分组的名称最大字节长度，注意一个汉字是两个字节
         */
        public const int QQ_MAX_GROUP_NAME = 16;
        /**
         * QQ昵称的最长长度
         */
        public const int QQ_MAX_NAME_LENGTH = 250;
        /**
         * QQ缺省表情个数
         */
        public const int QQ_COUNT_DEFAULT_FACE = 134;
        /**
         * 得到用户信息的回复包字段个数
         */
        public const int QQ_COUNT_GET_USER_INFO_FIELD = 37;
        /**
         * 修改用户信息的请求包字段个数，比实际的多1，最开始的QQ号不包括
         */
        public const int QQ_COUNT_MODIFY_USER_INFO_FIELD = 35;
        /**
         * 用户备注信息的字段个数
         */
        public const int QQ_COUNT_REMARK_FIELD = 7;
        /**
         * @author seraph
         * <p/>
         * 客户端版本号 - QQ2007II
         */
        public const ushort QQ_CLIENT_VERSION_115B = 0x115b;
        /**
         * 服务器端版本号 (不一定) 不一定真的是表示服务器端版本号，似乎和发出的包不同，这个有其他的含义， 感觉像是包的类型标志
         */
        public const ushort QQ_SERVER_VERSION_0100 = 0x0100;

        /// <summary>
        /// 网络硬盘协议族
        /// </summary>
        public enum DiskVersion : ushort
        {

            // 用于网络硬盘协议族，标识版本
            /// <summary>
            /// 
            /// </summary>
            QQ_DISK_SERVER_VERSION_0101 = 0x0101,
            /// <summary>
            /// 
            /// </summary>
            QQ_DISK_CLIENT_VERSION_0207 = 0x0207,
            /// <summary>
            /// 
            /// </summary>
            QQ_DISK_SERVER_VERSION = QQ_DISK_SERVER_VERSION_0101,
            /// <summary>
            /// 
            /// </summary>
            QQ_DISK_CLIENT_VERSION = QQ_DISK_CLIENT_VERSION_0207
        }

        /**
         * 中转服务器版本号
         */
        public const ushort QQ_AGENT_SERVER_VERSION_04D1 = 0x04D1;
        /**
         * 程序缺省使用的客户端版本号
         */
        public const ushort QQ_CLIENT_VERSION = QQ_CLIENT_VERSION_115B;

        /// <summary>
        /// 登陆模式
        /// </summary>
        public enum LoginMode : byte
        {
            /**
             * 正常登陆
             */
            QQ_LOGIN_MODE_NORMAL = 0x0A,
            /**
             * 隐身登陆
             */
            QQ_LOGIN_MODE_HIDDEN = 0x28
        }

        /// <summary>
        /// 性别
        /// </summary>
        public enum Gender : byte
        {
            /**
             * 性别-男
             */
            QQ_GENDER_GG = 0x0,
            /**
             * 性别-女
             */
            QQ_GENDER_MM = 0x1,
            /**
         * 性别-未知
         */
            QQ_GENDER_UNKNOWN = (byte)0xFF
        }

        /// <summary>
        /// 标志
        /// </summary>
        [Flags]
        public enum FriendFlag : byte
        {
            /**
             * 标志-QQ会员
             */
            QQ_FRIEND_FLAG_QQ_MEMBER = 0x01,
            /**
             * 标志-手机
             */
            QQ_FRIEND_FLAG_MOBILE = 0x10,
            /**
             * 标志-手机绑定
             */
            QQ_FRIEND_FLAG_BIND_MOBILE = 0x20,
        }

        /// <summary>
        /// 在线状态
        /// </summary>
        public enum Status : byte
        {
            /**
             * 在线状态-在线
             */
            QQ_STATUS_ONLINE = 0x0A,
            /**
             * 在线状态-离线
             */
            QQ_STATUS_OFFLINE = 0x14,
            /**
             * 在线状态-离开
             */
            QQ_STATUS_AWAY = 0x1E,
            /**
             * 在线状态-隐身
             */
            QQ_STATUS_HIDDEN = 0x28,
            /**
             * 在线状态-Q我
             */
            QQ_STATUS_QME = 0x3c,
            /**
             * 在线状态 - 无语
             */
            QQ_STATUS_MUTE = 0x46,
            /**
             * 在线状态 - 忙碌
             */
            QQ_STATUS_BUSY = 0x32
        }

        // 用户标志，比如QQFriend类，好友状态改变包都包含这样的标志
        [Flags]
        public enum Flag : int
        {
            /**
             * 有摄像头
             */
            QQ_FLAG_CAM = 0x80,
            /**
             * 绑定了手机
             */
            QQ_FLAG_BIND = 0x40,
            /**
             * 移动QQ用户
             */
            QQ_FLAG_MOBILE = 0x20,
            /**
             * 会员
             */
            QQ_FLAG_MEMBER = 0x02,
            /**
             * TM登录
             */
            QQ_FLAG_TM = 0x40000,
            // 用户属性，在UserProperty中，相关命令0x0065
            /**
             * 有个性签名
             */
            QQ_FLAG_HAS_SIGNATURE = 0x40000000,
            /**
             * 有自定义头像
             */
            QQ_FLAG_HAS_CUSTOM_HEAD = 0x100000
        }
        /**
         * 用户输入状态包
         */
        public const ushort QQ_CMD_INPUT_STATUS = 0x0017;
        /**
         * 好友列表从第一个好友开始
         */
        public const ushort QQ_POSITION_FRIEND_LIST_START = 0x0000;
        /**
         * 好友列表已经全部得到
         */
        public const ushort QQ_POSITION_FRIEND_LIST_END = 0xFFFF;
        /**
         * 在线好友列表从第一个好友开始 changed by seraph
         */
        public const int QQ_POSITION_ONLINE_LIST_START = 0;
        /**
         * 在线好友列表已经全部得到
         */
        public const byte QQ_POSITION_ONLINE_LIST_END = (byte)0xFF;
        /**
         * 用户属性列表从第一个好友开始
         */
        public const ushort QQ_POSITION_USER_PROPERTY_START = 0x0000;
        /**
         * 用户属性列表结束
         */
        public const ushort QQ_POSITION_USER_PROPERTY_END = 0xFFFF;
        /// <summary>
        /// 好友列表排序
        /// </summary>
        public enum FriendSort : byte
        {
            /**
             * 不对得到的好友列表排序
             */
            QQ_FRIEND_LIST_UNSORTED = 0,
            /**
             * 对得到的好友列表排序
             */
            QQ_FRIEND_LIST_SORTED = 1
        }

        /// <summary>
        /// 通用回复常量
        /// </summary>
        public enum ReplyCode : byte
        {
            // 回复常量
            /**
             * 通用常量，操作成功
             */
            QQ_REPLY_OK = 0x00,
            QQ_REPLY_NEED_VERTIFY = 0x01
        }

        /// <summary>
        /// 添加好友回复
        /// </summary>
        public enum Reply_AddFriend : byte
        {
            QQ_REPLY_OK = 0x00,
            /**
             * 对方已经是我的好友
             */
            QQ_REPLY_ADD_FRIEND_ALREADY = (byte)0x99,
            /**
          * 发送认证消息成功
          */
            QQ_REPLY_ADD_FRIEND_AUTH_OK = 0x30
        }

        /// <summary>
        /// 登录回复
        /// </summary>
        public enum Reply_Login : byte
        {
            QQ_REPLY_OK = 0x00,
            /**
             * 请求登录令牌成功
             */
            QQ_REPLY_REQUEST_LOGIN_TOKEN_OK = 0x00,
            /**
             * 登录信息-登录失败
             */
            QQ_REPLY_LOGIN_FAIL = 0x09,
            /**
             * 登录信息-重定向
             */
            QQ_REPLY_LOGIN_REDIRECT = 0x0A,

            //登录失败
            QQ_LOGIN_FAIL = 0x05
        }
        /// <summary>
        /// 改变在线状态回复
        /// </summary>
        public enum Reply_ChangeStatus : byte
        {
            /**
             * 改变在线状态成功
             */
            QQ_REPLY_CHANGE_STATUS_OK = 0x30
        }
        /// <summary>
        /// 高级搜索结束
        /// </summary>
        public enum Reply_Search : byte
        {
            QQ_REPLY_OK = 0x00,
            /**
             * 高级搜索结束，没有更多数据
             */
            QQ_REPLY_ADVANCED_SEARCH_END = 1
        }

        /// <summary>
        /// 申请中转服务器 回复
        /// </summary>
        public enum Reply_RequestAgent : ushort
        {
            /**
             * 申请中转服务器，重定向
             */
            QQ_REPLY_REQUEST_AGENT_REDIRECT = 0x0001,
            /**
             * 申请中转服务器成功
             */
            QQ_REPLY_REQUEST_AGENT_OK = 0x0000,
            /**
         * 要发送的图片太大
         */
            QQ_REPLY_REQUEST_AGENT_TOO_LONG = 0x0003
        }

        /// <summary>
        /// 登录验证
        /// </summary>
        public enum SubCMD_GetLoginToken : byte
        {
            // 0x00BA的子命令
            /**
             * 登录认证
             */
            QQ_SUB_CMD_GET_LOGIN_AUTH = 0x01,
            /**
             * 登录验证
             */
            QQ_SUB_COMMAND_GET_LOGIN_TOKEN = 0x01,
            /**
             * 扩展的登录认证
             */
            QQ_SUB_COMMAND_GET_LOGIN_TOKEN_EX = 0x03,
            /**
             * 刷新验证码图片
             */
            QQ_SUB_CMD_SUBMIT_VERIFY_CODE = 0x02,
            /**  */
            QQ_SUB_CMD_SUBMIT_VERTIFY_CODE_EX = 0x04
        }

        public enum Reply_LoginToken2 : byte
        {
            QQ_REPLY_OK = 0x00,
            /**
             * 登录需要输入验证码
             */
            QQ_REPLY_LOGIN_NEED_VERIFY = 0x01
        }

        /// <summary>
        /// 命令常量
        /// </summary>
        public enum Command : ushort
        {

            QQ_CMD_FIRST_LOGIN = 0x0018,
            /**
             * 命令常量 - 登出
             */
            QQ_CMD_LOGOUT = 0x0001,
            /**
             * 命令常量 - 保持在线状态
             */
            QQ_CMD_KEEP_ALIVE = 0x0002,
            /**
             * 命令常量 - 修改自己的信息
             */
            QQ_CMD_MODIFY_INFO = 0x0004,
            /**
             * 命令常量 - 查找用户
             */
            QQ_CMD_SEARCH_USER = 0x0005,
            /**
             * 命令常量 - 得到好友信息
             */
            QQ_CMD_GET_USER_INFO = 0x0006,
            /**
             * 命令常量 - 删除一个好友
             */
            QQ_CMD_DELETE_FRIEND = 0x000A,
            /**
             * 命令常量 - 发送验证信息
             */
            QQ_CMD_ADD_FRIEND_AUTH = 0x000B,
            /**
             * 命令常量 - 改变自己的在线状态
             */
            QQ_CMD_CHANGE_STATUS = 0x000D,
            /**
             * 命令常量 - 确认收到了系统消息
             */
            QQ_CMD_ACK_SYS_MSG = 0x0012,
            /**
             * 命令常量 - 发送消息
             */
            QQ_CMD_SEND_IM = 0x0016,
            /**
             * 命令常量 - 接收消息
             */
            QQ_CMD_RECV_IM = 0x0017,
            /**
             * 命令常量 - 把自己从对方好友名单中删除
             */
            QQ_CMD_REMOVE_SELF = 0x001C,
            /**
             * 请求一些操作需要的密钥，比如文件中转，视频也有可能
             */
            QQ_CMD_REQUEST_KEY = 0x001D,
            /**
             * 命令常量 - 登陆
             */
            QQ_CMD_LOGIN = 0x0022,


            /**
 * 命令常量 - 登陆之前判断服务器是否接受连接,目的是为了确定服务器（2007中适用）
 *
 * @author luna
 */
            QQ_CMD_TOUCH = 0x0091,
            /**
             * 命令常量 - 密码验证标志包
             *
             * @author luna
             */
            QQ_CMD_CHECK_PASSWORD = 0x00DD,
            /**
             * 命令常量 - 登陆之前的第一个登陆令牌的命令字
             *
             * @author luna
             */
            QQ_CMD_LOGIN_TOKEN_1 = 0x0062,

            /**
 * @author luna
 * <p/>
 * 请求登陆令牌2的包标志
 */
            QQ_CMD_LOGIN_TOKEN_2 = 0x00BA,
            /**
             * ************************************************************************
             * 命令常量 - 请求ServerToken的包（2007中适用）
             *
             * @author luna
             */
            QQ_CMD_SERVERTOKEN = 0x0052,
            /**
             * 命令常量 - 密码验证串md5(pass)+random
             *
             * @author luna
             */
            QQ_CMD_PROVEPW = 0x0020,


            /**
         * 命令常量 - 得到好友列表
         */
            QQ_CMD_GET_FRIEND_LIST = 0x0026,
            /**
             * 命令常量 - 得到在线好友列表
             */
            QQ_CMD_GET_ONLINE_OP = 0x0027,
            /**
             * 命令常量 - 发送短消息
             */
            QQ_CMD_SEND_SMS = 0x002D,
            /**
             * 命令常量 - 群相关命令
             */
            QQ_CMD_CLUSTER_CMD = 0x0030,
            /**
             * 命令常量 - 测试连接
             */
            QQ_CMD_TEST = 0x0031,
            /**
             * 命令常量 - 分组数组操作
             */
            QQ_CMD_GROUP_DATA_OP = 0x003C,
            /**
             * 命令常量 - 上传分组中的好友QQ号列表
             */
            QQ_CMD_UPLOAD_GROUP_FRIEND = 0x003D,
            /**
             * 命令常量 - 好友相关数据操作
             */
            QQ_CMD_FRIEND_DATA_OP = 0x003E,
            /**
             * 命令常量 - 下载分组中的好友QQ号列表
             */
            QQ_CMD_DOWNLOAD_GROUP_FRIEND = 0x0058,
            /**
             * 命令常量 - 好友等级信息相关操作
             */
            QQ_CMD_FRIEND_LEVEL_OP = 0x005C,
            /**
             * 命令常量 - 隐私数据操作
             */
            QQ_CMD_PRIVACY_DATA_OP = 0x005E,
            /**
             * 命令常量 - 群数据操作命令
             */
            QQ_CMD_CLUSTER_DATA_OP = 0x005F,
            /**
             * 命令常量 - 好友高级查找
             */
            QQ_CMD_ADVANCED_SEARCH = 0x0061,
            /**
             * 命令常量 - 用户属性操作
             */
            QQ_CMD_USER_PROPERTY_OP = 0x0065,
            /**
             * 命令常量 - 临时会话操作
             */
            QQ_CMD_TEMP_SESSION_OP = 0x00e1,
            /**
             * 命令常量 - 个性签名的操作
             */
            QQ_CMD_SIGNATURE_OP = 0x0067,
            /**
             * 命令常量 - 接收到系统消息
             */
            QQ_CMD_RECV_MSG_SYS = 0x0080,
            /**
             * 命令常量 - 好友改变状态
             */
            QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS = 0x0081,
            /**
             * 命令常量 - 天气操作
             */
            QQ_CMD_WEATHER_OP = 0x00A6,
            /**
             * 命令常量 - 添加好友
             */
            QQ_CMD_ADD_FRIEND_EX = 0x00A7,
            /**
             * 命令常量 - 发送验证消息
             */
            QQ_CMD_AUTHORIZE = 0x00A8,
            /**
             * 命令常量 - 请求验证信息
             */
            QQ_CMD_AUTH_INFO_OP = 0x00AE,
            /**
             * 命令常量 - 认证问题操作
             */
            QQ_CMD_AUTH_QUESTION_OP = 0x00B7,
            /**
             * 命令常量 - 请求登陆令牌
             */
            QQ_CMD_GET_LOGIN_TOKEN = 0x00BA,
            /**
             * 命令常量 - 未知命令，调试用途
             */
            QQ_CMD_UNKNOWN = 0xFFFF,
        }

        #region 登录包常量



        /**
         * 未加密的包体长度
         *
         * @author luna
         */
        public const ushort QQ_LOGIN_TOKEN_LENGTH = 58;
        /**
         * 未知两字节 - 07中登陆包的固定字节
         *
         * @author luma
         */
        public const ushort QQ_LOGIN_FIX_1_2 = 0x0000;
        /**
         * 数据一的长度 - 07登陆包中的未知数据1的长度
         */
        public const ushort QQ_LOGIN_FIX_1_LENGTH = 0x0020;


        /**
         * 命令常量 - 登陆之前判断服务器是否接受连接,目的是为了确定服务器（2007中适用）
         *
         * @author luna
         */
        public static readonly byte[] QQ_CMD_IMAGE = new byte[] { 0x00, (byte)0x91 };


        /**
         * @author luna
         * <p/>
         * 命令常量 - 15字节的00
         */
        public static readonly byte[] QQ_PRELOGIN_1_15 = new byte[]{0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00
    };
        /**
         * @author luna
         * <p/>
         * 命令常量 - 包序号
         */
        public static readonly byte[] QQ_PACKET_NUM = new byte[] { 0x00, 0x00 };
        /**
         * @author luna
         * <p/>
         * 命令常量 - 验证登陆返回包的两字节00
         */
        public const ushort QQ_TOUCH_RETURN = 0x0000;
        /**
         * @author luna
         * <p/>
         * 命令常量 - 登陆令牌1的包标志
         */
        public const ushort QQ_LOGINTOKEN1_RETURN = 0x2679;
        /**
         * @author luna
         * <p/>
         * 命令常量 - 登陆令牌2的包标志,其实和1是一样的，不过为了区分我还是把它写出来了， 按说应该是不一样的才对，可是返回的就是一样的，-_-!!
         */
        public const ushort QQ_LOGINTOKEN2_RETURN = 0x2679;

        /**
         * @author luna
         * <p/>
         * 未知5字节常量1
         */
        public static readonly byte[] QQ_LOGIN_FIX_1_5 = new byte[]{0x03, 0x00,
            0x05, 0x00, 0x00
    };
        /**
         * @author luna
         * <p/>
         * 未知5字节常量2
         */
        public static readonly byte[] QQ_LOGIN_FIX_2_5 = new byte[]{0x00, 0x00,
            0x00, 0x00, 0x00
    };
        /**
         * @author luna
         * <p/>
         * 固定的密码验证常量8字节
         */
        public static readonly byte[] QQ_LOGIN_FIX_1_8 = new byte[]{0x00, 0x5f,
            0x00, 0x00, 0x08, 0x04, 0x01, (byte) 0x0e
    };
        /**
         * @author luna
         * <p/>
         * 32字节的近似固定内容 - 07的Login包中的内容
         */
        public static readonly byte[] QQ_LOGIN_FIX_2_32_ = new byte[]{(byte) 0xF2,
            0x79, 0x79, 0x19, (byte) 0xA7, 0x28, (byte) 0x84, (byte) 0xD8,
            0x72, 0x11, 0x70, 0x68, (byte) 0xA9, 0x43, 0x5E, (byte) 0x9B, 0x66,
            (byte) 0xD5, (byte) 0xDC, 0x48, (byte) 0x99, 0x79, 0x59,
            (byte) 0xA0, 0x03, 0x37, (byte) 0xEC, (byte) 0xF8, (byte) 0xFA,
            (byte) 0xCE, (byte) 0xCC, (byte) 0xBC
    };
        /**
         * @author luna
         * <p/>
         * 4字节的近似固定内容 - 07的Login包中的内容
         */
        public static readonly byte[] QQ_LOGIN_FIX_4 = new byte[] { 0x00, 0x00, 0x07, 0x59 };
        /**
         * @author luna
         * <p/>
         * 16字节的近似固定内容 - 07的Login包中的内容
         */
        public static readonly byte[] QQ_LOGIN_FIX_3_16_ = new byte[]{(byte) 0x96,
            (byte) 0xDA, 0x48, 0x21, 0x1E, (byte) 0xA5, 0x41, (byte) 0xA3,
            0x60, 0x15, 0x6F, 0x14, (byte) 0xE0, (byte) 0xEC, 0x02, 0x4C
    };
        /**
         * @author luna
         * <p/>
         * 11字节的近似固定内容 - 07的Login包中的内容
         */
        public static readonly byte[] QQ_LOGIN_FIX_11 = new byte[]{0x00, 0x01, 0x02,
            0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00
    };
        /**
         * @author luna
         * <p/>
         * 4字节的推荐服务器地址 - 07的Login包中的内容
         */
        public static readonly byte[] QQ_LOGIN_SERVER = new byte[]{0x3A,
            (byte) 0xFB, 0x3f, 0x3e
    };
        /**
         * @author luna
         * <p/>
         * 19字节固定内容 - 07Login包中的内容
         */
        public static readonly byte[] QQ_LOGIN_FIX_4_35_ = new byte[]{0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, (byte) 0xEB, 0x5A, 0x40, 0x7A,
            (byte) 0x9D, (byte) 0x81, 0x2E, 0x53, 0x20, 0x70, (byte) 0xB4,
            0x1D, 0x64, (byte) 0xB2, 0x3B, (byte) 0xF9
    };
        /**
         * @author luna
         * <p/>
         * 10字节的近似固定内容 - 07Login包中的内容
         */
        public static readonly byte[] QQ_LOGIN_FIX_7_10_ = new byte[]{0x00, 0x00,
            0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00
    };
        public static readonly byte[] QQ_LOGIN_FIX_11_ = new byte[]{0x00, 0x00,
            0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
    };
        /**
         * @author luna
         * <p/>
         * 又是固定十六字节的内容!_! - 07Login包中的内容
         */
        public static readonly byte[] QQ_LOGIN_FIX_11_16_ = new byte[]{(byte) 0x90,
            0x7A, (byte) 0xB4, 0x79, 0x70, 0x52, 0x0B, 0x40, (byte) 0xB9, 0x14,
            (byte) 0xD7, 0x43, 0x0B, 0x7C, (byte) 0xE1, 0x0F
    };
        /**
         * @author luna
         * <p/>
         * 固定的45字节， 功能未知 - 07Login包中的内容
         */
        public static readonly byte[] QQ_LOGIN_FIX_14_45_ = new byte[]{0x00, 0x00,
            0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x01,
            (byte) 0xB1, 0x28, (byte) 0x91, 0x0D, 0x00, 0x10, 0x28,
            (byte) 0xAB, (byte) 0xD8, (byte) 0x8E, 0x75, 0x41, (byte) 0xDF,
            0x79, (byte) 0xBF, (byte) 0xA6, (byte) 0xA4, (byte) 0xD6,
            (byte) 0xB1, (byte) 0xF0, 0x08, (byte) 0xBC, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
    };
        /**
         * @author seraph
         * <p/>
         * 固定的332字节，功能未知 - 07Login包中的内容
         */
        public static readonly byte[] QQ_LOGIN_FIX_16_332_ = new byte[]{
            0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x01, 0x40, 0x01, 0x01, 0x58, (byte) 0x83,
            (byte) 0xD0, 0x00, 0x10, (byte) 0x9D, 0x14, 0x64, 0x0A, 0x2E,
            (byte) 0xE2, 0x11, (byte) 0xF7, (byte) 0x90, (byte) 0xF0, (byte) 0xB5, 0x5F, 0x16,
            (byte) 0xFB, 0x41, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x02, 0x76, 0x3C, (byte) 0xEE,
            0x4A, 0x00, 0x10, (byte) 0x86, (byte) 0x81, (byte) 0xAD, 0x1F, (byte) 0xC8,
            (byte) 0xC9, (byte) 0xCC, (byte) 0xCF, (byte) 0xCA, (byte) 0x9F, (byte) 0xFF, (byte) 0x88, (byte) 0xC0,
            0x5C, (byte) 0x88, (byte) 0xD5, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00
    };
        /**
         * @author luna
         * <p/>
         * 32字节可能固定的内容，目前还不确定是否可以认为他是固定的
         */
        public static readonly byte[] QQ_LOGIN_FIX_2_32 = new byte[]{(byte) 0x98,
            0x3A, 0x13, (byte) 0xCD, 0x6C, 0x64, (byte) 0xE1, (byte) 0xC5,
            0x32, (byte) 0xCA, 0x1B, (byte) 0xB5, (byte) 0x8A, (byte) 0x8C,
            (byte) 0xB9, (byte) 0xDD, 0x29, 0x23, (byte) 0xDE, (byte) 0xA4,
            (byte) 0x9F, 0x02, (byte) 0xBC, 0x74, 0x2F, (byte) 0x95, 0x46,
            0x35, 0x7D, (byte) 0xB6, 0x47, (byte) 0xE1
    };
        /**
         * @author luna
         * <p/>
         * 20字节的固定内容，和上面的一样也不知道是不是固定内容
         */
        public static readonly byte[] QQ_LOGIN_FIX_3_20 = new byte[]{0x51, 0x7C,
            (byte) 0xC5, (byte) 0xB5, 0x59, 0x6A, 0x7D, 0x29, (byte) 0x99,
            0x06, (byte) 0xB1, 0x2E, 0x15, 0x7D, 0x6A, (byte) 0xD1,
            (byte) 0xD8, 0x0E, 0x6A, (byte) 0xA2
    };
        /**
         * @author luna
         * <p/>
         * 3字节的固定内容
         */
        public static readonly byte[] QQ_LOGIN_FIX_4_3 = new byte[] { 0x00, 0x78, 0x79 };
        #endregion

        /**
             * @author luna
             * <p/>
             * 命令常量 - 一个未知的0x14
             */
        public const ushort QQ_CMD_UNKNOWNCONST = 0x0014;

        /// <summary>
        /// 0x00B7认证问题操作 子命令
        /// </summary>
        public enum SubCMD_Auth_Question : byte
        {
            // 0x00B7的子命令
            /**
             * 得到问题
             */
            QQ_SUB_CMD_GET_QUESTION = 0x03,
            /**
             * 回答问题
             */
            QQ_SUB_CMD_ANSWER_QUESTION = 0x04
        }

        /// <summary>
        /// 0x00A8 发送验证消息 子命令
        /// </summary>
        public enum SubCMD_Authorize : byte
        {
            // 0x00A8的子命令
            /**
             * 普通验证，即验证码验证
             */
            QQ_SUB_CMD_NORMAL_AUTHORIZE = 0x02,
            /**
             * 双重验证，即验证码和问题双重验证
             */
            QQ_SUB_CMD_DOUBLE_AUTHORIZE = 0x10,
            /**
             * 如果通过验证则直接把对方加为自己的好友
             */
            QQ_SUB_CMD_APPROVE_AUTHORIZE_AND_ADD_HIM = 0x03,
            /**
             * 对方拒绝了请求
             */
            QQ_SUB_CMD_REJECT_AUTHORIZE = 0x05
        }

        ///// <summary>
        ///// 0x00BA请求登陆令牌子命令
        ///// </summary>
        //public enum SubCMD_Login_Token : byte
        //{

        //}
        /// <summary>
        /// 0x005E隐私数据操作的子命令
        /// </summary>
        public enum SubCMD_Privacy : byte
        {
            // 0x005E的子命令
            /**
             * 只能通过号码搜到我
             */
            QQ_SUB_CMD_SEARCH_ME_BY_QQ_ONLY = 0x03,
            /**
        * 共享地理位置
        */
            QQ_SUB_CMD_SHARE_GEOGRAPHY = 0x04
        }

        /// <summary>
        /// 是否设置一个选项，用在如0x005E这样的命令中，其他地方如果类似也可使用
        /// </summary>
        public enum ValueSet : byte
        {
            // 是否设置一个选项，用在如0x005E这样的命令中，其他地方如果类似也可使用
            /**
             * 设置
             */
            QQ_VALUE_SET = 0x01,
            /**
             * 取消设置
             */
            QQ_VALUE_UNSET = 0x00
        }

        // 用户类型，用在高级查找中
        /**
         * 普通用户
         */
        public const byte QQ_USER_TYPE_NORMAL = 0x01;

        /// <summary>
        /// 0x005C好友等级信息相关操作子命令
        /// </summary>
        public enum SubCMD_Friend_Level : byte
        {
            // 0x005C的子命令
            /**
             * 得到好友等级信息
             */
            QQ_SUB_CMD_GET_FRIEND_LEVEL = 0x02
        }
        /// <summary>
        /// 0x005F群数据操作的子命令
        /// </summary>
        public enum SubCMD_ClusterData : byte
        {
            // 
            /**
             * 得到群在线成员
             */
            QQ_SUB_CMD_GET_CLUSTER_ONLINE_MEMBER = 0x01
        }

        #region 文件操作相关常量
        /**
         * 自定义头像上传服务器
         */
        public const String QQ_SERVER_UPLOAD_CUSTOM_HEAD = "cface.qq.com";
        /**
         * 自定义头像下载服务器
         */
        public const String QQ_SERVER_DOWNLOAD_CUSTOM_HEAD = "cface_tms.qq.com";
        /**
         * 网络硬盘服务器
         */
        public static readonly String[] QQ_SERVER_DISK = new String[]{
            "219.133.38.39", "219.133.38.40", "219.133.38.99",
            "219.133.38.100", "219.133.38.101", "219.133.38.102",
            "219.133.38.176", "219.133.38.202", "219.133.51.105",
            "219.133.51.106"
    };
        /**
         * 网络硬盘服务器端口
         */
        public const int QQ_SERVER_DISK_PORT = 9910;
        /**
         * 命令常量 - 请求中转
         */
        public const ushort QQ_05_CMD_REQUEST_AGENT = 0x0021;
        /**
         * 命令常量 - 请求得到自定义表情
         */
        public const ushort QQ_05_CMD_REQUEST_FACE = 0x0022;
        /**
         * 命令常量 - 开始传送
         */
        public const ushort QQ_05_CMD_TRANSFER = 0x0023;
        /**
         * 命令常量 - 请求开始传送
         */
        public const ushort QQ_05_CMD_REQUEST_BEGIN = 0x0026;

        /*
         * 03协议族
         */
        /**
         * 请求得到好友自定义头像数据
         */
        public const ushort QQ_03_CMD_GET_CUSTOM_HEAD_DATA = 0x0002;
        /**
         * 请求得到好友自定义头像信息
         */
        public const ushort QQ_03_CMD_GET_CUSTOM_HEAD_INFO = 0x0004;
        /**
         * 初始群自定义表情中转服务器，从这些初始的服务器开始请求，直到请求 到一个愿意提供中转的服务器为止
         */
        public static readonly String[] QQ_SERVER_GROUP_FILE = new String[]{"219.133.40.128" // GroupFile.tencent.com
    };
        #endregion


        /// <summary>
        /// 0x001D请求一些操作需要的密钥，比如文件中转，视频也有可能
        /// 的子命令
        /// </summary>
        public enum SubCMD_Request_Key : byte
        {
            // 用于0x001D
            /**
             * 请求密钥类型 - 未知
             */
            QQ_SUB_CMD_REQUEST_UNKNOWN03_KEY = 0x3,
            /**
             * 请求密钥类型 - 文件中转密钥
             */
            QQ_SUB_CMD_REQUEST_FILE_AGENT_KEY = 0x4,
            /**
             * 请求密钥类型 - 未知
             */
            QQ_SUB_CMD_REQUEST_UNKNOWN06_KEY = 0x6,
            /**
             * 请求密钥类型 - 未知
             */
            QQ_SUB_CMD_REQUEST_UNKNOWN07_KEY = 0x7,
            /**
             * 请求密钥类型 - 未知
             */
            QQ_SUB_CMD_REQUEST_UNKNOWN08_KEY = 0x8
        }

        /// <summary>
        /// 请求验证信息0x00AE的子命令
        /// </summary>
        public enum SubCMD_Auth_Info : byte
        {
            /**
             * 请求验证信息
             */
            QQ_SUB_CMD_GET_AUTH_INFO = 0x01,
            /**
             * 通过提交验证码来得到验证信息
             */
            QQ_SUB_CMD_GET_AUTH_INFO_NEED_VERTIFY = 0x02,

            QQ_SUB_CMD_SUBMIT_AUTH_INFO_BY_VERTIFYCODE = 0x02
        }

        /// <summary>
        /// 提交验证信息
        /// </summary>
        public enum SubCMD_Submit_Auth_Info : byte
        {
            /// <summary>
            /// 
            /// </summary>
            QQ_SUB_CMD_SUBMIT_AUTH_INFO_BY_VERTIFYCODE = 0x02
        }

        /**
         * 提交验证信息
         */
        public const ushort QQ_SUB_CMD_SUBMIT_AUTH_INFO_BY_VERTIFYCODE = 0x02;

        public enum SubSubCMD_Auth_Info : ushort
        {
            /**
             * 修改个性签名是所需要的验证令牌
             */
            QQ_SUB_SUB_CMD_GET_SIGNATURE_AUTH_INFO = 0x0007,
            /**
             * 添加好友的验证信息
             */
            QQ_SUB_SUB_CMD_GET_FRIEND_AUTH_INFO = 0x01,
            /**
             * 添加好友需要验证码
             */
            QQ_SUB_SUB_CMD_GET_FRIEND_AUTH_INFO_NEED_VERTIFY = 0x02


        }

        /// <summary>
        /// 群操作命令
        /// </summary>
        public enum ClusterCommand : byte
        {
            /**
             * 群操作命令 - 创建群
             */
            QQ_CLUSTER_CMD_CREATE_CLUSTER = 0x01,
            /**
             * 群操作命令 - 修改群成员
             */
            QQ_CLUSTER_CMD_MODIFY_MEMBER = 0x02,
            /**
             * 群操作命令 - 修改群资料
             */
            QQ_CLUSTER_CMD_MODIFY_CLUSTER_INFO = 0x03,
            /**
             * 群操作命令 - 得到群资料
             */
            QQ_CLUSTER_CMD_GET_CLUSTER_INFO = 0x04,
            /**
             * 群操作命令 - 激活群
             */
            QQ_CLUSTER_CMD_ACTIVATE_CLUSTER = 0x05,
            /**
             * 群操作命令 - 搜索群
             */
            QQ_CLUSTER_CMD_SEARCH_CLUSTER = 0x06,
            /**
             * 群操作命令 - 加入群
             */
            QQ_CLUSTER_CMD_JOIN_CLUSTER = 0x07,
            /**
             * 群操作命令 - 加入群的验证消息
             */
            QQ_CLUSTER_CMD_JOIN_CLUSTER_AUTH = 0x08,
            /**
             * 群操作命令 - 退出群
             */
            QQ_CLUSTER_CMD_EXIT_CLUSTER = 0x09,
            /**
             * 群操作命令 - 得到在线成员
             */
            QQ_CLUSTER_CMD_GET_ONLINE_MEMBER = 0x0B,
            /**
             * 群操作命令 - 得到成员资料
             */
            QQ_CLUSTER_CMD_GET_MEMBER_INFO = 0x0C,
            /**
             * 群操作命令 - 修改群名片
             */
            QQ_CLUSTER_CMD_MODIFY_CARD = 0x0E,
            /**
             * 群操作命令 - 批量得到成员群名片中的真实姓名
             */
            QQ_CLUSTER_CMD_GET_CARD_BATCH = 0x0F,
            /**
             * 群操作命令 - 得到某个成员的群名片
             */
            QQ_CLUSTER_CMD_GET_CARD = 0x10,
            /**
             * 群操作命令 - 提交组织架构到服务器
             */
            QQ_CLUSTER_CMD_COMMIT_ORGANIZATION = 0x11,
            /**
             * 群操作命令 - 从服务器获取组织架构
             */
            QQ_CLUSTER_CMD_UPDATE_ORGANIZATION = 0x12,
            /**
             * 群操作命令 - 提交成员分组情况到服务器
             */
            QQ_CLUSTER_CMD_COMMIT_MEMBER_ORGANIZATION = 0x13,
            /**
             * 群操作命令 - 得到各种version id
             */
            QQ_CLUSTER_CMD_GET_VERSION_ID = 0x19,
            /**
             * 群操作命令 - 扩展格式的群消息
             */
            QQ_CLUSTER_CMD_SEND_IM_EX = 0x1A,
            /**
             * 群操作命令 - 设置成员角色
             */
            QQ_CLUSTER_CMD_SET_ROLE = 0x1B,
            /**
             * 群操作命令 - 转让自己的角色给他人
             */
            QQ_CLUSTER_CMD_TRANSFER_ROLE = 0x1C,
            /**
             * 解散群，如果自己是群的创建者，则使用这个命令
             */
            QQ_CLUSTER_CMD_DISMISS_CLUSTER = 0x1D,
            /**
             * 群操作命令 - 创建临时群
             */
            QQ_CLUSTER_CMD_CREATE_TEMP = 0x30,
            /**
             * 群操作命令 - 修改临时群成员列表
             */
            QQ_CLUSTER_CMD_MODIFY_TEMP_MEMBER = 0x31,
            /**
             * 群操作命令 - 退出临时群
             */
            QQ_CLUSTER_CMD_EXIT_TEMP = 0x32,
            /**
             * 群操作命令 - 得到临时群资料
             */
            QQ_CLUSTER_CMD_GET_TEMP_INFO = 0x33,
            /**
             * 群操作命令 - 修改临时群资料
             */
            QQ_CLUSTER_CMD_MODIFY_TEMP_INFO = 0x34,
            /**
             * 群操作命令 - 发送临时群消息
             */
            QQ_CLUSTER_CMD_SEND_TEMP_IM = 0x35,
            /**
             * 群操作命令 - 子群操作
             */
            QQ_CLUSTER_CMD_SUB_CLUSTER_OP = 0x36,
            /**
             * 群操作命令 - 激活临时群
             */
            QQ_CLUSTER_CMD_ACTIVATE_TEMP = 0x37
        }

        /// <summary>
        /// 群操作命令回复
        /// </summary>
        public enum Reply_ClusterCommand : byte
        {
            /**
             * 群操作命令回复 - 不存在这个群
             */
            QQ_REPLY_NO_SUCH_CLUSTER = 0x02,
            /**
             * 群操作命令回复 - 群已经被删除
             */
            QQ_REPLY_TEMP_CLUSTER_REMOVED = 0x03,
            /**
             * 群操作命令回复 - 你已经不是临时群的成员
             */
            QQ_REPLY_NOT_TEMP_CLUSTER_MEMBER = 0x04,
            /**
             * 群操作命令回复 - 你已经不是固定群的成员
             */
            QQ_REPLY_NOT_CLUSTER_MEMBER = 0x0A

        }
        public enum TempSessionOpReply
        {
            QQ_REPLY_OK = 0x00,
            // 临时会话操作回复码
            /**
             * 临时会话消息发送成功，但是对方可能不在线，无法及时回复
             */
            QQ_REPLY_MAYBE_OFFLINE = 0x02
        }
        /**
         * 发送加好友的请求成功
         */
        public const byte QQ_AUTHORIZE_REPLY_OK = 0x00;

        #region 短信回复码，用来表示单条短信的状态
        // 短信回复码，用来表示单条短信的状态
        /**
         * 短信发送成功
         */
        public const byte QQ_REPLY_SMS_OK = 0x00;
        /**
         * 队列中，准备发送
         */
        public const byte QQ_REPLY_SMS_QUEUED = 0x01;
        /**
         * 发送失败
         */
        public const byte QQ_REPLY_SMS_FAIL = 0x04;
        #endregion

        // 请求验证信息回复码
        /**
         * 通过url得到验证码图片进行验证, 用于QQ_SUB_CMD_GET_AUTH_INFO
         */
        public const byte QQ_REPLY_GET_PUZZLE_FROM_URL = 0x01;
        /**
         * 错误的验证码，用于QQ_SUB_CMD_SUBMIT_AUTH_INFO
         */
        public const byte QQ_REPLY_INVALID_AUTH = 0x01;

        // 认证问题命令回复码
        /**
         * 错误的问题答案
         */
        public const byte QQ_REPLY_WRONG_ANSWER = 0x01;
        /// <summary>
        /// 群类型常量
        /// </summary>
        public enum ClusterType : byte
        {
            /**
             * 群类型常量 - 固定群
             */
            QQ_CLUSTER_TYPE_PERMANENT = 0x01,
            /**
             * 临时群类型常量 - 多人对话
             */
            QQ_CLUSTER_TYPE_DIALOG = 0x01,
            /**
             * 临时群类型常量 - 讨论组
             */
            QQ_CLUSTER_TYPE_SUBJECT = 0x02
        }
        /// <summary>
        /// 群成员角色操作
        /// </summary>
        public enum ClusterRole_Op : byte
        {
            /**
             * 群成员角色操作 - 设置管理员
             */
            QQ_ROLE_OP_SET_ADMIN = 0x01,
            /**
             * 群成员角色操作 - 取消管理员
             */
            QQ_ROLE_OP_UNSET_ADMIN = 0x00
        }

        /// <summary>
        /// 群成员角色标志位
        /// </summary>
        [Flags]
        public enum Cluster_Role : byte
        {
            /**
             * 群成员角色标志位 - 管理员
             */
            QQ_ROLE_ADMIN = 0x01,
            /**
             * 群成员角色标志位 - 股东
             */
            QQ_ROLE_STOCKHOLDER = 0x02
        }
        /**
         * 成员角色 - 群名片可让群管理员修改
         */
        public const int QQ_ROLE_MANAGED = 0x08;

        /// <summary>
        /// 群操作子命令
        /// </summary>
        public enum SubCMD_Cluster : byte
        {
            /**
             * 群操作子命令 - 添加成员，用在修改成员列表命令中
             */
            QQ_CLUSTER_SUB_CMD_ADD_MEMBER = 0x01,
            /**
             * 群操作子命令 - 删除成员，用在修改成员列表命令中
             */
            QQ_CLUSTER_SUB_CMD_REMOVE_MEMBER = 0x02,
            /**
             * 群操作子命令 - 得到群内的讨论组列表
             */
            QQ_CLUSTER_SUB_CMD_GET_SUBJECT_LIST = 0x02,
            /**
             * 群操作子命令 - 得到多人对话列表
             */
            QQ_CLUSTER_SUB_CMD_GET_DIALOG_LIST = 0x01
        }
        public enum ClusterAuth : byte
        {
            /**
             * 群认证消息类型 - 请求加入群
             */
            QQ_CLUSTER_AUTH_REQUEST = 0x01,
            /**
             * 群认证消息类型 - 同意加入群
             */
            QQ_CLUSTER_AUTH_APPROVE = 0x02,
            /**
             * 群认证消息类型 - 拒绝加入群
             */
            QQ_CLUSTER_AUTH_REJECT = 0x03
        }
        /// <summary>
        /// 加入群的回复码
        /// </summary>
        public enum Cluster_JoinResult : byte
        {
            /**
             * 加入群的回复码 - 加入成功
             */
            QQ_CLUSTER_JOIN_OK = 0x01,
            /**
             * 加入群的回复码 - 对方需要认证
             */
            QQ_CLUSTER_JOIN_NEED_AUTH = 0x02,
            /**
             * 加入群的回复码 - 群禁止加入
             */
            QQ_CLUSTER_JOIN_DENIED = 0x03
        }
        /// <summary>
        /// 群的搜索方式
        /// </summary>
        public enum Cluster_SearchType : byte
        {
            /**
             * 群的搜索方式 - 根据群号搜索
             */
            QQ_CLUSTER_SEARCH_BY_ID = 0x01,
            /**
             * 群的搜索方式 - 搜索示范群
             */
            QQ_CLUSTER_SEARCH_DEMO = 0x02
        }

        // 操作码，用在设置角色时
        /**
         * 取消管理员
         */
        public const byte QQ_CLUSTER_OP_UNSET_ADMIN = 0x00;
        /**
         * 设置管理员
         */
        public const byte QQ_CLUSTER_OP_SET_ADMIN = 0x01;

        // 群消息的content type
        /**
         * 消息中不包含自定义表情
         */
        public const ushort QQ_CONTENT_TYPE_DEFAULT = 0x0001;

        /// <summary>
        /// 消息回复类型
        /// </summary>
        public enum IM_Reply_Type : byte
        {
            /** 消息中包含自定义表情 */
            //	public const ushort QQ_CONTENT_TYPE_RICH = 0x0002;
            /**
             * 消息回复类型 - 正常回复
             */
            QQ_IM_NORMAL_REPLY = 0x01,
            /**
             * 消息回复类型 - 自动回复
             */
            QQ_IM_AUTO_REPLY = 0x02
        }

        /// <summary>
        /// 消息来源，主要在ReceiveIMPacket中使用，和协议关系不大
        /// </summary>
        public enum IM_From : int
        {
            // 消息来源，主要在ReceiveIMPacket中使用，和协议关系不大
            /**
             * 来自好友
             */
            QQ_IM_FROM_USER = 0,
            /**
             * 来自系统
             */
            QQ_IM_FROM_SYS = 1,
            /**
             * 来自群
             */
            QQ_IM_FROM_CLUSTER = 2,
            /**
             * 来自短消息
             */
            QQ_IM_FROM_SMS = 3,
            /**
             * 来自临时会话
             */
            QQ_IM_FROM_TEMP_SESSION = 4

        }

        /// <summary>
        ///  子命令常量，用于命令0x0027
        /// </summary>
        public enum SubCMD_Get_Online_Friend : byte
        {
            // 子命令常量，用于命令0x0027
            /**
             * 得到在线好友
             */
            QQ_SUB_CMD_GET_ONLINE_FRIEND = 0x2,
            /*
             * 得到系统服务
             */
            /// <summary>
            /// 
            /// </summary>
            QQ_SUB_CMD_GET_ONLINE_SERVICE = 0x3
        }

        /// <summary>
        /// 分组数组操作子命令常量，服务于命令0x003C
        /// </summary>
        public enum SubCMD_Group : byte
        {
            // 子命令常量，服务于命令0x003C
            /**
             * 服务器端数据操作 - 上传组名
             */
            QQ_SUB_CMD_UPLOAD_GROUP_NAME = 0x2,
            /**
             * 服务器端数据操作 - 下载组名
             */
            QQ_SUB_CMD_DOWNLOAD_GROUP_NAME = 0x1
        }

        /// <summary>
        ///  子命令常量，用于命令0x0066
        /// </summary>
        public enum SubCMD_TempSession : byte
        {
            // 子命令常量，用于命令0x0066
            /**
             * 临时会话操作 - 发送临时会话消息
             */
            QQ_SUB_CMD_SEND_TEMP_SESSION_IM = 0x01
        }

        /// <summary>
        /// 好友相关数据操作的子命令
        /// </summary>
        public enum SubCMD_Friend_OP : byte
        {
            // 子命令常量，服务于命令0x003E
            /**
             * 服务器端数据操作 - 批量下载好友备注
             */
            QQ_SUB_CMD_BATCH_DOWNLOAD_FRIEND_REMARK = 0x0,
            /**
             * 服务器端数据操作 - 上传好友备注
             */
            QQ_SUB_CMD_UPLOAD_FRIEND_REMARK = 0x1,
            /**
             * 服务器端数据操作 - 添加好友到列表中
             */
            QQ_SUB_CMD_REMOVE_FRIEND_FROM_LIST = 0x2,
            /**
             * 服务器端数据操作 - 下载好友备注
             */
            QQ_SUB_CMD_DOWNLOAD_FRIEND_REMARK = 0x3
        }
        /**
         * 服务器端数据操作 - 删除好友验证信息
         */
        public const ushort QQ_SUB_SUB_CMD_GET_DELETE_USER_AUTH_INFO = 0x0006;
        /**
         * 申请加入群命令
         */
        public const ushort QQ_SUB_SUB_CMD_GET_CLUSTER_AUTH_INFO = 0x0002;
        /// <summary>
        /// 个性签名的操作的子命令
        /// </summary>
        public enum SubCMD_Signature : byte
        {
            // 子命令常量，用于子命令0x0067
            /**
             * 修改个性签名
             */
            QQ_SUB_CMD_MODIFY_SIGNATURE = 0x01,
            /**
             * 删除个性签名
             */
            QQ_SUB_CMD_DELETE_SIGNATURE = 0x02,
            /**
             * 得到个性签名
             */
            QQ_SUB_CMD_GET_SIGNATURE = 0x03
        }

        // 子命令，用于0x0065
        /// <summary>
        ///  子命令，用于0x0065
        /// </summary>
        public enum SubCMD_Property : byte
        {
            /**
             * 得到用户属性
             */
            QQ_SUB_CMD_GET_USER_PROPERTY = 0x01
        }

        // 子命令，用于0x00A6
        public enum SubCMD_Weather : byte
        {
            /**
             * 得到天气数据
             */
            QQ_SUB_CMD_GET_WEATHER = 0x01
        }

        /// <summary>
        /// 
        /// </summary>
        public enum FriendType : byte
        {
            // 这两个常量用在下载好友分组时
            /**
             * 号码类型 - 号码代表一个用户
             */
            QQ_ID_IS_FRIEND = 0x1,
            /**
             * 号码类型 - 号码是一个群
             */
            QQ_ID_IS_CLUSTER = 0x4
        }

        /// <summary>
        /// 消息类型
        /// </summary>
        public enum Recv_IMType : ushort
        {
            // 消息类型，就是ReceiveIMHeader中的类型，对于有些类型，我们做为通知来处理
            // 而不是显示在消息窗口中，比如请求加入，验证之类的消息
            /**
             * 来自好友的消息
             */
            QQ_RECV_IM_FRIEND = 0x0009,
            /**
             * 来自陌生人的消息
             */
            //  QQ_RECV_IM_STRANGER = 0x000A,
            QQ_RECV_IM_STRANGER = 0x0079,
            /**
             * 手机短消息 - 普通绑定用户
             */
            QQ_RECV_IM_BIND_USER = 0x000B,
            /**
             * 手机短消息 - 普通手机
             */
            QQ_RECV_IM_MOBILE = 0x000C,
            /**
             * 会员登录提示，这个消息基本没内容，就是用来提醒你是会员，可以显示一个窗口来告诉你上次登录时间和ip
             */
            QQ_RECV_IM_MEMBER_LOGIN_HINT = 0x0004,
            /**
             * 手机短消息 - 移动QQ用户
             */
            QQ_RECV_IM_MOBILE_QQ = 0x0013,
            /**
             * 手机短消息 - 移动QQ用户(使用手机号描述)
             */
            QQ_RECV_IM_MOBILE_QQ_2 = 0x0014,
            /**
             * 好友属性改变通知
             */
            QQ_RECV_IM_PROPERTY_CHANGE = 0x001E,
            /**
             * 临时会话消息
             */
            QQ_RECV_IM_TEMP_SESSION = 0x001F,

            /**
         * 未知类型的群消息，在2003时是普通群消息
         */
            QQ_RECV_IM_UNKNOWN_CLUSTER = 0x0020,
            /**
             * 通知我被加入到一个群，这个群先前已经建立，我是后来被加的
             */
            QQ_RECV_IM_ADDED_TO_CLUSTER = 0x0021,
            /**
             * 我被踢出一个群
             */
            QQ_RECV_IM_DELETED_FROM_CLUSTER = 0x0022,
            /**
             * 有人请求加入群
             */
            QQ_RECV_IM_REQUEST_JOIN_CLUSTER = 0x0023,
            /**
             * 同意对方加入群
             */
            QQ_RECV_IM_APPROVE_JOIN_CLUSTER = 0x0024,
            /**
             * 拒绝对方加入群
             */
            QQ_RECV_IM_REJECT_JOIN_CLUSTER = 0x0025,
            /**
             * 通知我被加入到一个群，我是在群被创建的时候就被加的
             */
            QQ_RECV_IM_CREATE_CLUSTER = 0x0026,
            /**
             * 临时群消息
             */
            QQ_RECV_IM_TEMP_CLUSTER = 0x002A,
            /**
             * 固定群消息
             */
            QQ_RECV_IM_CLUSTER = 0x002B,
            /**
             * 群通知
             */
            QQ_RECV_IM_CLUSTER_NOTIFICATION = 0x002C,
            /**
             * 收到的系统消息
             */
            QQ_RECV_IM_SYS_MESSAGE = 0x0030,
            /**
             * 收到个性签名改变通知
             */
            QQ_RECV_IM_SIGNATURE_CHANGE = 0x0041,
            /**
             * 收到自定义头像变化通知
             */
            QQ_RECV_IM_CUSTOM_HEAD_CHANGE = 0x0049,
            /**
             * 收到扩展格式的普通消息
             */
            QQ_RECV_IM_FRIEND_EX = 0x0084,
            /**
             * 收到来自陌生人的消息
             */
            QQ_RECEV_IM_STRANGER_EX = 0x0085,

            // 系统消息类型
            /**
             * 同一个QQ号在其他地方登录，我被踢出
             */
            QQ_RECV_IM_KICK_OUT = 0x01
        }

        /**
         * 临时会话消息子命令
         */
        public const ushort QQ_SUB_SUB_CMD_GET_USER_TEMP_SESSION_AUTH_INFO = 0x4200;

        // 移动QQ手机短信的发送者描述类型
        /**
         * 用QQ号描述发送者
         */
        public const byte QQ_MOBILE_QQ_BY_QQ = 0x00;
        /**
         * 用手机号码描述发送者
         */
        public const byte QQ_MOBILE_QQ_BY_MOBILE = 0x01;


        /// <summary>
        /// 消息类型，这个类型比上面的类型又再低一级，他们基本从属于QQ_RECV_IM_FRIEND
        /// </summary>
        public enum IMType : ushort
        {
            // 消息类型，这个类型比上面的类型又再低一级，他们基本从属于QQ_RECV_IM_FRIEND
            // 所以他们是normalIMHeader中的类型
            /**
             * 普通文件消息
             */
            QQ_IM_TYPE_TEXT = 0x000B,
            /**
             * 一个TCP连接请求
             */
            QQ_IM_TYPE_TCP_REQUEST = 0x0001,
            /**
             * 接收TCP连接请求
             */
            QQ_IM_TYPE_ACCEPT_TCP_REQUEST = 0x0003,
            /**
             * 拒绝TCP连接请求
             */
            QQ_IM_TYPE_REJECT_TCP_REQUEST = 0x0005,
            /**
             * UDP连接请求
             */
            QQ_IM_TYPE_UDP_REQUEST = 0x0035,
            /**
             * 接受UDP连接请求
             */
            QQ_IM_TYPE_ACCEPT_UDP_REQUEST = 0x0037,
            /**
             * 拒绝UDP连接请求
             */
            QQ_IM_TYPE_REJECT_UDP_REQUEST = 0x0039,
            /**
             * 通知文件传输端口
             */
            QQ_IM_TYPE_NOTIFY_IP = 0x003B,
            /**
             * 请求对方主动连接
             */
            QQ_IM_TYPE_ARE_YOU_BEHIND_FIREWALL = 0x003F,
            /**
             * 未知含意
             */
            QQ_IM_TYPE_ARE_YOU_BEHIND_PROXY = 0x0041,
            /**
             * 未知含意，0x0041的回复
             */
            QQ_IM_TYPE_YES_I_AM_BEHIND_PROXY = 0x0042,
            /**
             * 通知文件中转服务器信息
             */
            QQ_IM_TYPE_NOTIFY_FILE_AGENT_INFO = 0x004B,
            /**
             * 取消TCP或者UDP连接请求
             */
            QQ_IM_TYPE_REQUEST_CANCELED = 0x0049
        }

        #region 短信相关
        // 以下常量用于QQ短信功能
        /**
         * 短消息发送者最大名称字节长度
         */
        public const int QQ_MAX_SMS_SENDER_NAME = 13;
        /**
         * 接受者手机号最大长度
         */
        public const int QQ_MAX_SMS_MOBILE_LENGTH = 18;
        /**
         * 短信发送时，发送者名称和短信内容的字符数之和的最大值
         */
        public const int QQ_MAX_SMS_LENGTH = 58;
        /**
         * 发送模式 - 免提短信
         */
        public const byte QQ_SMS_MODE_HAND_FREE = 0x20;
        /**
         * 发送模式 - 普通
         */
        public const byte QQ_SMS_MODE_NORMAL = 0x00;
        /**
         * 短消息内容 - 普通短消息
         */
        public const byte QQ_SMS_CONTENT_NORMAL = 0x00;
        /**
         * 短消息内容 - 言语传情
         */
        public const byte QQ_SMS_CONTENT_LOVE_WORD = 0x01;
        /**
         * 短消息内容 - 精美图片
         */
        public const byte QQ_SMS_CONTENT_PICTURE = 0x02;
        /**
         * 短消息内容 - 悦耳铃声
         */
        public const byte QQ_SMS_CONTENT_RING = 0x03;
        #endregion
        /// <summary>
        /// // 以下常量用于消息中的表情，对于自定义表情的表示格式参考NormalIM.java的注释
        /// </summary>
        public enum FaceType : byte
        {
            // 以下常量用于消息中的表情，对于自定义表情的表示格式参考NormalIM.java的注释
            /**
             * 系统自带表情前导字节
             */
            QQ_TAG_DEFAULT_FACE = 0x14,
            /**
             * 自定义表情前导字节
             */
            QQ_TAG_CUSTOM_FACE = 0x15,
            /**
             * 新自定义表情，普通格式
             */
            QQ_FORMAT_TAG_NEW_CUSTOM_FACE = 0x33,
            /**
             * 已经出现过的自定义表情
             */
            QQ_FORMAT_TAG_EXISTING_CUSTOM_FACE = 0x34,
            /**
             * 新自定义表情，存储在服务器端
             */
            QQ_FORMAT_TAG_NEW_SERVER_SIDE_CUSTOM_FACE = 0x36,
            /**
             * 已经出现过的服务器端自定义表情
             */
            QQ_FORMAT_TAG_EXISTING_SERVER_SIDE_CUSTOM_SIDE = 0x37,
            /**
             * 未知自定义表情格式描述1，未知含义
             */
            QQ_FORMAT_TAG_UNKNOWN_1 = 0x38,
            /**
             * 未知自定义表情格式描述2，未知含义
             */
            QQ_FORMAT_TAG_UNKNOWN_2 = 0x39
        }
        /// <summary>
        /// 认证类型
        /// </summary>
        public enum AuthType : byte
        {
            // 认证类型，加一个人为好友时是否需要验证等等
            /**
             * 不需认证
             */
            QQ_AUTH_NO = 0,
            /**
             * 需要认证
             */
            QQ_AUTH_NEED = 1,
            /**
             * 对方拒绝加好友
             */
            QQ_AUTH_REJECT = 2,
            /**
             * 需要回答问题
             */
            QQ_AUTH_QUESTION = 3
        }
        /// <summary>
        /// 这三个常量用在添加好友认证的包中，表示你是请求，或者你拒绝还是同意别人的请求
        /// </summary>
        public enum Add_Friend_Auth_Type : byte
        {
            // 这三个常量用在添加好友认证的包中，表示你是请求，或者你拒绝还是同意别人的请求
            /**
             * 通过认证
             */
            QQ_MY_AUTH_APPROVE = 0x30,
            /**
             * 拒绝认证
             */
            QQ_MY_AUTH_REJECT = 0x31,
            /**
             * 请求认证
             */
            QQ_MY_AUTH_REQUEST = 0x32
        }
        /// <summary>
        /// 认证类型
        /// </summary>
        public enum Cluster_Auth_Type : byte
        {
            // 认证类型，加入一个群是否需要验证等等
            /**
             * 不需认证
             */
            QQ_AUTH_CLUSTER_NO = 1,
            /**
             * 需要认证
             */
            QQ_AUTH_CLUSTER_NEED = 2,
            /**
             * 群拒绝添加成员
             */
            QQ_AUTH_CLUSTER_REJECT = 3
        }



        /// <summary>
        /// 联系方法的可见类型
        /// </summary>
        public enum Contact_Status : int
        {
            // 联系方法的可见类型
            /**
             * 完全公开
             */
            QQ_CONTACT_OPEN = 0,
            /**
             * 仅好友可见
             */
            QQ_CONTACT_ONLY_FRIENDS = 1,
            /**
             * 完全保密
             */
            QQ_CONTACT_CLOSE = 2
        }

        /// <summary>
        /// 系统通知的类型
        /// </summary>
        public enum Sys_Msg : int
        {
            // 系统通知的类型
            /**
             * 自己被别人加为好友
             */
            QQ_SYS_BEING_ADDED = 1,
            /**
             * 对方请求加你为好友 当对方不使用0x00A8命令发送认证消息，才会收到此系统通知
             */
            QQ_SYS_ADD_FRIEND_REQUEST = 2,
            /**
             * 同意对方加自己为好友
             */
            QQ_SYS_ADD_FRIEND_APPROVED = 3,
            /**
             * 拒绝对方加自己为好友
             */
            QQ_SYS_ADD_FRIEND_REJECTED = 4,
            /**
             * 广告
             */
            QQ_SYS_ADVERTISEMENT = 6,
            /**
             * 更新提示
             */
            QQ_SYS_UPDATE_HINT = 9,
            /**
             * 对方把你加为了好友
             */
            QQ_SYS_BEING_ADDED_EX = 40,
            /**
             * 对方请求加你为好友 当对方使用0x00A8命令发送认证消息，才会收到此系统通知
             */
            QQ_SYS_ADD_FRIEND_REQUEST_EX = 41,
            /**
             * 同意对方加自己为好友，同时加对方为好友
             */
            QQ_SYS_ADD_FRIEND_APPROVED_AND_ADD = 43,
        }

        /// <summary>
        /// 最后一个字节标志，是否允许对方加自己为好友
        /// </summary>
        public enum Flag_Reverse : byte
        {
            // QQ_SYS_ADD_FRIEND_REQUEST_EX消息中的最后一个字节标志，是否允许对方加自己为好友
            /**
             * 允许对方也加自己为好友
             */
            QQ_FLAG_ALLOW_ADD_REVERSE = 0x01,
            /**
             * 不允许对方加自己为好友
             */
            QQ_FLAG_NOT_ALLOW_ADD_REVERSE = 0x02
        }

        /// <summary>
        /// 搜索类类型
        /// </summary>
        public enum SearchType : byte
        {
            // 这是搜索用户时指定的搜索类类型，比如是查看全部在线用户，还是自定义查找
            /**
             * 看谁在线上
             */
            QQ_SEARCH_ALL = 0x31,
            /**
             * 自定义搜索 - 精确查找，也就是按照QQ号查找
             */
            QQ_SEARCH_CUSTOM_ACCURATE = 0x33,
            /**
             * 自定义搜索 - 模糊查找，也就是按照昵称或者email查找
             */
            QQ_SEARCH_CUSTOM_FUZZY = 0x32
        }
        // 用于自定义头像
        /**
         * 最大自定义头像分片大小
         */
        public const int QQ_MAX_CUSTOM_HEAD_FRAGMENT_SIZE = 800;

        /// <summary>
        /// 传输类型
        /// </summary>
        public enum Transfer_Type : byte
        {
            // 传输类型
            /**
             * 传输文件
             */
            QQ_TRANSFER_FILE = 0x65,
            /**
             * 传输自定义表情
             */
            QQ_TRANSFER_FACE = 0x6B
        }

        /// <summary>
        /// 请求传送文件消息中的一个标志字节，传输类型之后那个，意思不明，姑且这样
        /// </summary>
        public enum Transfer_By : byte
        {
            // 请求传送文件消息中的一个标志字节，传输类型之后那个，意思不明，姑且这样
            /**
             * UDP，可能不是这意思
             */
            QQ_TRANSFER_FILE_UDP = 0,
            /**
             * 直接UDP，可能不是这意思
             */
            QQ_TRANSFER_FILE_DIRECT_UDP = 1,
            /**
             * TCP，可能不是这意思
             */
            QQ_TRANSFER_FILE_TCP = 2,
            /**
             * 直接TCP，可能不是这意思
             */
            QQ_TRANSFER_FILE_DIRECT_TCP = 3
        }
        /**
         * 最大的做MD5的长度，当传送一个文件时，如果这个文件很大，则只对文件的前面一部分做MD5
         */
        public const int QQ_MAX_FILE_MD5_LENGTH = 10002432;


        /**
         * 首次登陆时的包中的固定8字节
         */
        public static readonly byte[] QQ_FIRST_LOGIN_FIX_8 = new byte[]{0x00, 0x4D,
            0x00, 0x00, 0x08, 0x04, 0x01, (byte) 0xE0
    };
        /**
         * 首次登陆包中的登陆令牌1的长度
         */
        public const byte QQ_LOGIN_TOKEN1_LENGTH = 0x20;
        /**
         * 首次登陆包中的固定2字节
         *
         * @author seraph
         */
        public static readonly byte[] QQ_LOGIN_FIX_2 = new byte[] { 0x00, 0x00 };
        /**
         * 首次登陆包中的登陆令牌2的长度
         */
        public const ushort QQ_LOFGIN_TOKEN2_LENGTH = 0x0020;
        /**
         * 首次登陆包的登陆令牌2的内容
         */
        public static readonly byte[] QQ_FIX_LOGIN_TOKEN2 = new byte[]{0x12, 0x66,
            (byte) 0x8C, (byte) 0xAC, 0x56, 0x13, (byte) 0x9D, 0x18, 0x58,
            0x78, (byte) 0xEC, 0x21, 0x39, 0x7E, 0x5F, 0x3F, 0x40, 0x61,
            (byte) 0xD4, (byte) 0xF8, (byte) 0xAD, (byte) 0x9A, 0x6A,
            (byte) 0xF1, 0x33, (byte) 0xF2, 0x1A, (byte) 0x80, 0x05,
            (byte) 0xD3, (byte) 0xA3, 0x4C
    };
        /**
         * 325字节固定内容
         */
        public static readonly byte[] QQ_FIX_LAST_325 = new byte[]{0x00, 0x00, 0x00,
            0x00, 0x01, 0x3F, 0x00, (byte) 0xBF, (byte) 0xAA, (byte) 0xCA,
            (byte) 0xBC, (byte) 0xB5, (byte) 0xDA, (byte) 0xD2, (byte) 0xBB,
            (byte) 0xB4, (byte) 0xCE, (byte) 0xBA, (byte) 0xC5, (byte) 0xC2,
            (byte) 0xEB, (byte) 0xD7, (byte) 0xA2, (byte) 0xB2, (byte) 0xE1,
            (byte) 0xB5, (byte) 0xC7, (byte) 0xC2, (byte) 0xBC, 0x2E, 0x2E,
            0x2E, 0x2E, 0x2E, 0x2E, (byte) 0xCA, (byte) 0xB1, (byte) 0xBC,
            (byte) 0xE4, 0x5B, 0x32, 0x30, 0x30, 0x38, 0x2D, 0x30, 0x32, 0x2D,
            0x30, 0x37, 0x20, 0x30, 0x30, 0x3A, 0x31, 0x39, 0x3A, 0x32, 0x32,
            0x5D, 0x0D, 0x0A, 0x09, (byte) 0xB3, (byte) 0xF5, (byte) 0xCA,
            (byte) 0xBC, (byte) 0xBB, (byte) 0xAF, (byte) 0xB5, (byte) 0xC7,
            (byte) 0xC2, (byte) 0xBC, (byte) 0xB7, (byte) 0xFE, (byte) 0xCE,
            (byte) 0xF1, (byte) 0xC6, (byte) 0xF7, (byte) 0xC1, (byte) 0xD0,
            (byte) 0xB1, (byte) 0xED, (byte) 0xA3, (byte) 0xAC, (byte) 0xC9,
            (byte) 0xCF, (byte) 0xB4, (byte) 0xCE, (byte) 0xB5, (byte) 0xC4,
            (byte) 0xB5, (byte) 0xC7, (byte) 0xC2, (byte) 0xBC, (byte) 0xB7,
            (byte) 0xBD, (byte) 0xCA, (byte) 0xBD, (byte) 0xCE, (byte) 0xAA,
            (byte) 0xA1, (byte) 0xBE, (byte) 0xB3, (byte) 0xF5, (byte) 0xCA,
            (byte) 0xBC, (byte) 0xB5, (byte) 0xC7, (byte) 0xC2, (byte) 0xBC,
            (byte) 0xB7, (byte) 0xBD, (byte) 0xCA, (byte) 0xBD, (byte) 0xA1,
            (byte) 0xBF, 0x0D, 0x0A, 0x09, 0x55, 0x44, 0x50, (byte) 0xB7,
            (byte) 0xFE, (byte) 0xCE, (byte) 0xF1, (byte) 0xC6, (byte) 0xF7,
            (byte) 0xA1, (byte) 0xBE, 0x73, 0x7A, 0x2E, 0x74, 0x65, 0x6E, 0x63,
            0x65, 0x6E, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x3A, 0x38, 0x30, 0x30,
            0x30, (byte) 0xA1, (byte) 0xBF, (byte) 0xD0, (byte) 0xE8,
            (byte) 0xD2, (byte) 0xAA, (byte) 0xD3, (byte) 0xF2, (byte) 0xC3,
            (byte) 0xFB, (byte) 0xBD, (byte) 0xE2, (byte) 0xCE, (byte) 0xF6,
            0x2E, 0x2E, 0x2E, 0x0D, 0x0A, 0x09, 0x55, 0x44, 0x50, (byte) 0xB7,
            (byte) 0xFE, (byte) 0xCE, (byte) 0xF1, (byte) 0xC6, (byte) 0xF7,
            (byte) 0xA1, (byte) 0xBE, 0x73, 0x7A, 0x37, 0x2E, 0x74, 0x65, 0x6E,
            0x63, 0x65, 0x6E, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x3A, 0x38, 0x30,
            0x30, 0x30, (byte) 0xA1, (byte) 0xBF, (byte) 0xD0, (byte) 0xE8,
            (byte) 0xD2, (byte) 0xAA, (byte) 0xD3, (byte) 0xF2, (byte) 0xC3,
            (byte) 0xFB, (byte) 0xBD, (byte) 0xE2, (byte) 0xCE, (byte) 0xF6,
            0x2E, 0x2E, 0x2E, 0x0D, 0x0A, 0x09, 0x55, 0x44, 0x50, (byte) 0xB7,
            (byte) 0xFE, (byte) 0xCE, (byte) 0xF1, (byte) 0xC6, (byte) 0xF7,
            (byte) 0xA1, (byte) 0xBE, 0x73, 0x7A, 0x36, 0x2E, 0x74, 0x65, 0x6E,
            0x63, 0x65, 0x6E, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x3A, 0x38, 0x30,
            0x30, 0x30, (byte) 0xA1, (byte) 0xBF, (byte) 0xD0, (byte) 0xE8,
            (byte) 0xD2, (byte) 0xAA, (byte) 0xD3, (byte) 0xF2, (byte) 0xC3,
            (byte) 0xFB, (byte) 0xBD, (byte) 0xE2, (byte) 0xCE, (byte) 0xF6,
            0x2E, 0x2E, 0x2E, 0x0D, 0x0A, 0x09, 0x55, 0x44, 0x50, (byte) 0xB7,
            (byte) 0xFE, (byte) 0xCE, (byte) 0xF1, (byte) 0xC6, (byte) 0xF7,
            (byte) 0xA1, (byte) 0xBE, 0x73, 0x7A, 0x33, 0x2E, 0x74, 0x65, 0x6E,
            0x63, 0x65, 0x6E, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x3A, 0x38, 0x30,
            0x30, 0x30, (byte) 0xA1, (byte) 0xBF, (byte) 0xD0, (byte) 0xE8,
            (byte) 0xD2, (byte) 0xAA, (byte) 0xD3, (byte) 0xF2, (byte) 0xC3,
            (byte) 0xFB, (byte) 0xBD, (byte) 0xE2, (byte) 0xCE, (byte) 0xF6,
            0x2E, 0x2E, 0x2E, 0x0D, 0x0A, 0x09, 0x55, 0x44
    };
        public static readonly byte[] QQ_SIGNATURE_AUTH_TOKEN_32 = new byte[]{
            (byte) 0xA0, (byte) 0xFC, (byte) 0xDC, 0x62, 0x23, 0x09, (byte) 0xBE, (byte) 0xB7,
            0x2F, (byte) 0xC1, (byte) 0xF2, (byte) 0xC0, (byte) 0xCB, (byte) 0xA4, 0x1A, 0x44, 0x43,
            (byte) 0xA2, 0x36, (byte) 0xB0, 0x02, 0x79, 0x64, 0x07, 0x2F,
            (byte) 0x8E, 0x5B, (byte) 0xE4, (byte) 0xA3, 0x2A, 0x0A, 0x40
    };
    }
}